package cn.oder.select;

import cn.oder.Sorted;
import cn.oder.SortedBase;
import cn.oder.enums.Sore;
import lombok.Getter;

import java.util.List;

/**
 * 类简介: 直接选择排序:在所有数据中选择最小替换第一个，以此类推
 * 时间复杂度是O（n^2）,时间复杂度为O(1),稳定的
 *
 * @Author: ShangGuan
 * @Time: 2024/05/17
 **/
@Getter
public class DirectSelectSorted extends SortedBase implements Sorted {


    public DirectSelectSorted(Sore sore, List<Integer> arr) {
        super(sore, arr);
    }

    public DirectSelectSorted(List<Integer> arr) {
        super(arr);
    }


    @Override
    public List<Integer> sort() {
        int elementIndex = 0;//需要原来替换原来数组的第几个元素
        for (int i = 0; i < arr.size(); i++) {
            int index = elementIndex;//最大或者最小的元素索引
            for (int j = elementIndex; j < arr.size(); j++) {
                int node = arr.get(index);//当前节点的元素
                int processNode = arr.get(j);//需要比较的数据
                if (sore.equals(Sore.ASC)) {
                    if (node > processNode) {
                        index = j;
                    }
                } else {
                    if (node < processNode) {
                        index = j;
                    }
                }
            }
            int processNumber = arr.get(elementIndex);
            arr.set(elementIndex, arr.get(index));
            arr.set(index, processNumber);
            elementIndex++;
        }
        return arr;
    }



}
